package com.bestcem.xm.user.dao;

import com.bestcem.xm.user.entity.pojo.UserGroupLevelDO;

import java.util.List;

/**
 * 用户组层级信息dao
 *
 * @author qiongyu.cui <qiongyu.cui@idiaoyan.com>
 * @version v1.0
 * @date 2021/12/29 10:33
 */
public interface UserGroupLevelDao {

    /**
     * 新增
     *
     * @param userGroupLevelDO 组织层级
     * @return
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2021/12/29 15:30
     */
    String insert(UserGroupLevelDO userGroupLevelDO);

    /**
     * 批量新增
     *
     * @param userGroupLevelDOS 组织层级集合
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2021/12/29 15:30
     */
    void insertBatch(List<UserGroupLevelDO> userGroupLevelDOS);

    /**
     * 通过id删除
     *
     * @param id 组织层级id
     * @return Integer
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2021/12/29 15:30
     */
    Integer deleteById(String id);

    /**
     * 通过id集合删除
     *
     * @param ids 组织层级id集合
     * @return Integer
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2021/12/29 15:30
     */
    Integer deleteByIds(List<String> ids);

    /**
     * 通过id更新
     *
     * @param id               组织层级id
     * @param userGroupLevelDO 组织层级
     * @return Integer
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2021/12/29 15:30
     */
    Integer updateById(String id, UserGroupLevelDO userGroupLevelDO);

    /**
     * 批量更新显示字段
     *
     * @param userGroupLevelDos 层级列表
     * @return void
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/2/20 21:05
     */
    void updateByIds(List<UserGroupLevelDO> userGroupLevelDos);

    /**
     * 更新层级 level_children_id可以为null
     *
     * @param level 层级数据
     * @return java.lang.Integer
     * @author Linzhijian <zhijian.lin@idiaoyan.com>
     * @date 2022/04/02 18:24
     */
    Integer updateLevel(UserGroupLevelDO level);

    /**
     * 通过条件更新
     *
     * @param condition        组织层级更新条件
     * @param userGroupLevelDO 组织层级更新参数
     * @return Integer
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2021/12/29 15:30
     */
    Integer updateByCondition(UserGroupLevelDO condition, UserGroupLevelDO userGroupLevelDO);

    /**
     * 通过id查询
     *
     * @param id 组织层级id
     * @return
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2021/12/29 15:30
     */
    UserGroupLevelDO getById(String id);

    /**
     * 通过id集合查询
     *
     * @param ids 组织层级id集合
     * @return
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2021/12/29 15:30
     */
    List<UserGroupLevelDO> listByIds(List<String> ids);

    /**
     * 通过条件查询
     *
     * @param condition 组织层级查询条件
     * @return
     * @author wangyunyun <yunyun.wang@idiaoyan.com>
     * @date 2021/12/29 15:30
     */
    List<UserGroupLevelDO> listByCondition(UserGroupLevelDO condition);

    /**
     * 根据公司id获取层级信息并根据level_num倒序排序，使用时请注意顺序
     *
     * @param orgId 组织id
     * @return java.util.List<com.bestcem.xm.user.entity.pojo.UserGroupLevelDO>
     * @author Linzhijian <zhijian.lin@idiaoyan.com>
     * @date 2022/04/02 18:26
     */
    List<UserGroupLevelDO> getGroupLevelsByOrgId(String orgId);


    /**
     * 根据groupId查询它所在层级的levelNum
     *
     * @param groupId 组织id
     * @return com.bestcem.xm.util.ServiceResult<com.bestcem.xm.user.group.service.dto.group.UserGroupLevelDTO>
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/2/16 11:19
     */
    Integer getLevelNumByIdJoinLevel(String groupId);

    /**
     * 根据orgId和层级名称查询层级信息
     *
     * @param orgId          租户id
     * @param groupLevelName 层级名称
     * @return com.bestcem.xm.user.group.entity.pojo.UserGroupLevelDO
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/02/23 13:51
     */
    UserGroupLevelDO getGroupByOrgIdAndName(String orgId, String groupLevelName);

    /**
     * 查询父组织Id
     *
     * @param  levelId        组织层级Id
     * @return parentLevelId  父组织层级Id
     * @author jishuo.yan <jishuo.yan@idiaoyan.com>
     * @date   2022/02/08 20:38
     */
    String getParentLevelId(String levelId);
}
